o added fastpath output, syncronize update pdu
o refactor caps a bit
This commit is contained in:
parent
f66c5911a2
commit
53df4335eb
@ -636,7 +636,7 @@ libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
|
|||||||
out_uint16_le(s, bpp);
|
out_uint16_le(s, bpp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else /* slowpath */
|
||||||
{
|
{
|
||||||
LLOGLN(10, ("libxrdp_send_pointer: slowpath"));
|
LLOGLN(10, ("libxrdp_send_pointer: slowpath"));
|
||||||
xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s);
|
xrdp_rdp_init_data((struct xrdp_rdp *)session->rdp, s);
|
||||||
|
@ -266,7 +266,7 @@ xrdp_caps_process_cache_v3_codec_id(struct xrdp_rdp *self, struct stream *s,
|
|||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/* get the number of client cursor cache */
|
/* get the number of client cursor cache */
|
||||||
static int APP_CC
|
static int APP_CC
|
||||||
xrdp_caps_process_pointercache(struct xrdp_rdp *self, struct stream *s,
|
xrdp_caps_process_pointer(struct xrdp_rdp *self, struct stream *s,
|
||||||
int len)
|
int len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -275,7 +275,7 @@ xrdp_caps_process_pointercache(struct xrdp_rdp *self, struct stream *s,
|
|||||||
|
|
||||||
if (len < 2 + 2 + 2)
|
if (len < 2 + 2 + 2)
|
||||||
{
|
{
|
||||||
g_writeln("xrdp_caps_process_pointercache: error");
|
g_writeln("xrdp_caps_process_pointer: error");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
no_new_cursor = self->client_info.pointer_flags & 2;
|
no_new_cursor = self->client_info.pointer_flags & 2;
|
||||||
@ -286,7 +286,7 @@ xrdp_caps_process_pointercache(struct xrdp_rdp *self, struct stream *s,
|
|||||||
self->client_info.pointer_cache_entries = i;
|
self->client_info.pointer_cache_entries = i;
|
||||||
if (colorPointerFlag & 1)
|
if (colorPointerFlag & 1)
|
||||||
{
|
{
|
||||||
g_writeln("xrdp_caps_process_pointercache: client supports "
|
g_writeln("xrdp_caps_process_pointer: client supports "
|
||||||
"new(color) cursor");
|
"new(color) cursor");
|
||||||
in_uint16_le(s, i);
|
in_uint16_le(s, i);
|
||||||
i = MIN(i, 32);
|
i = MIN(i, 32);
|
||||||
@ -294,12 +294,12 @@ xrdp_caps_process_pointercache(struct xrdp_rdp *self, struct stream *s,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
g_writeln("xrdp_caps_process_pointercache: client does not support "
|
g_writeln("xrdp_caps_process_pointer: client does not support "
|
||||||
"new(color) cursor");
|
"new(color) cursor");
|
||||||
}
|
}
|
||||||
if (no_new_cursor)
|
if (no_new_cursor)
|
||||||
{
|
{
|
||||||
g_writeln("xrdp_caps_process_pointercache: new(color) cursor is "
|
g_writeln("xrdp_caps_process_pointer: new(color) cursor is "
|
||||||
"disabled by config");
|
"disabled by config");
|
||||||
self->client_info.pointer_flags = 0;
|
self->client_info.pointer_flags = 0;
|
||||||
}
|
}
|
||||||
@ -567,7 +567,7 @@ xrdp_caps_process_confirm_active(struct xrdp_rdp *self, struct stream *s)
|
|||||||
break;
|
break;
|
||||||
case RDP_CAPSET_POINTER: /* 8 */
|
case RDP_CAPSET_POINTER: /* 8 */
|
||||||
DEBUG(("RDP_CAPSET_POINTER"));
|
DEBUG(("RDP_CAPSET_POINTER"));
|
||||||
xrdp_caps_process_pointercache(self, s, len);
|
xrdp_caps_process_pointer(self, s, len);
|
||||||
break;
|
break;
|
||||||
case RDP_CAPSET_SHARE: /* 9 */
|
case RDP_CAPSET_SHARE: /* 9 */
|
||||||
DEBUG(("RDP_CAPSET_SHARE"));
|
DEBUG(("RDP_CAPSET_SHARE"));
|
||||||
|
@ -629,23 +629,46 @@ xrdp_rdp_send_data_update_sync(struct xrdp_rdp *self)
|
|||||||
init_stream(s, 8192);
|
init_stream(s, 8192);
|
||||||
DEBUG(("in xrdp_rdp_send_data_update_sync"));
|
DEBUG(("in xrdp_rdp_send_data_update_sync"));
|
||||||
|
|
||||||
|
if (self->client_info.use_fast_path & 1) /* fastpath output supported */
|
||||||
|
{
|
||||||
|
LLOGLN(10, ("xrdp_rdp_send_data_update_sync: fastpath"));
|
||||||
|
if (xrdp_rdp_init_fastpath(self, s) != 0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* slowpath */
|
||||||
|
{
|
||||||
if (xrdp_rdp_init_data(self, s) != 0)
|
if (xrdp_rdp_init_data(self, s) != 0)
|
||||||
{
|
{
|
||||||
DEBUG(("out xrdp_rdp_send_data_update_sync error"));
|
DEBUG(("out xrdp_rdp_send_data_update_sync error"));
|
||||||
free_stream(s);
|
free_stream(s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
out_uint16_le(s, RDP_UPDATE_SYNCHRONIZE);
|
out_uint16_le(s, RDP_UPDATE_SYNCHRONIZE);
|
||||||
out_uint8s(s, 2);
|
}
|
||||||
|
|
||||||
|
out_uint16_le(s, 0); /* pad */
|
||||||
s_mark_end(s);
|
s_mark_end(s);
|
||||||
|
|
||||||
|
if (self->client_info.use_fast_path & 1) /* fastpath output supported */
|
||||||
|
{
|
||||||
|
if (xrdp_rdp_send_fastpath(self, s,
|
||||||
|
FASTPATH_UPDATETYPE_SYNCHRONIZE) != 0)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* slowpath */
|
||||||
|
{
|
||||||
if (xrdp_rdp_send_data(self, s, RDP_DATA_PDU_UPDATE) != 0)
|
if (xrdp_rdp_send_data(self, s, RDP_DATA_PDU_UPDATE) != 0)
|
||||||
{
|
{
|
||||||
DEBUG(("out xrdp_rdp_send_data_update_sync error"));
|
DEBUG(("out xrdp_rdp_send_data_update_sync error"));
|
||||||
free_stream(s);
|
free_stream(s);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
DEBUG(("out xrdp_rdp_send_data_update_sync"));
|
DEBUG(("out xrdp_rdp_send_data_update_sync"));
|
||||||
free_stream(s);
|
free_stream(s);
|
||||||
@ -748,8 +771,8 @@ xrdp_rdp_send_synchronise(struct xrdp_rdp *self)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
out_uint16_le(s, 1);
|
out_uint16_le(s, 1); /* messageType (2 bytes) */
|
||||||
out_uint16_le(s, 1002);
|
out_uint16_le(s, 1002); /* targetUser (2 bytes) */
|
||||||
s_mark_end(s);
|
s_mark_end(s);
|
||||||
|
|
||||||
if (xrdp_rdp_send_data(self, s, RDP_DATA_PDU_SYNCHRONISE) != 0)
|
if (xrdp_rdp_send_data(self, s, RDP_DATA_PDU_SYNCHRONISE) != 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user