o added fastpath output, syncronize update pdu

o refactor caps a bit
ulab-next
speidy 11 years ago
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…
Cancel
Save