Skip to content

[pull] devel from neutrinolabs:devel #107

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Mar 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions libxrdp/libxrdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -702,6 +702,25 @@ libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
return 0;
}

/*****************************************************************************/
int EXPORT_CC
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type)
{
struct stream *s;

make_stream(s);
init_stream(s, 8192);
xrdp_rdp_init_data((struct xrdp_rdp *)(session->rdp), s);
out_uint16_le(s, RDP_POINTER_SYSTEM);
out_uint16_le(s, 0); /* pad */
out_uint32_le(s, pointer_type);
s_mark_end(s);
xrdp_rdp_send_data((struct xrdp_rdp *)session->rdp, s,
RDP_DATA_PDU_POINTER);
free_stream(s);
return 0;
}

/*****************************************************************************/
int EXPORT_CC
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
Expand Down
2 changes: 2 additions & 0 deletions libxrdp/libxrdpinc.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,8 @@ int
libxrdp_send_bitmap(struct xrdp_session *session, int width, int height,
int bpp, char *data, int x, int y, int cx, int cy);
int
libxrdp_send_pointer_system(struct xrdp_session *session, int pointer_type);
int
libxrdp_send_pointer(struct xrdp_session *session, int cache_idx,
char *data, char *mask, int x, int y, int bpp,
int width, int height);
Expand Down
4 changes: 4 additions & 0 deletions xrdp/xrdp.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,8 @@ xrdp_wm_key_sync(struct xrdp_wm *self, int device_flags, int key_flags);
int
xrdp_wm_pu(struct xrdp_wm *self, struct xrdp_bitmap *control);
int
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type);
int
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
char *data, char *mask, int x, int y, int bpp,
int width, int height);
Expand Down Expand Up @@ -568,6 +570,8 @@ server_paint_rects(struct xrdp_mod *mod, int num_drects, short *drects,
char *data, int width, int height,
int flags, int frame_id);
int
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type);
int
server_set_pointer(struct xrdp_mod *mod, int x, int y,
char *data, char *mask);
int
Expand Down
12 changes: 12 additions & 0 deletions xrdp/xrdp_mm.c
Original file line number Diff line number Diff line change
Expand Up @@ -466,6 +466,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm *self)
self->mod->server_egfx_cmd = server_egfx_cmd;
self->mod->server_set_pointer_large = server_set_pointer_large;
self->mod->server_paint_rects_ex = server_paint_rects_ex;
self->mod->server_set_pointer_system = server_set_pointer_system;
self->mod->si = &(self->wm->session->si);
}
}
Expand Down Expand Up @@ -4457,6 +4458,17 @@ server_egfx_cmd(struct xrdp_mod *mod,
return 0;
}

/*****************************************************************************/
int
server_set_pointer_system(struct xrdp_mod *mod, int pointer_type)
{
struct xrdp_wm *wm;

wm = (struct xrdp_wm *)(mod->wm);
xrdp_wm_send_pointer_system(wm, pointer_type);
return 0;
}

/*****************************************************************************/
int
server_set_pointer(struct xrdp_mod *mod, int x, int y,
Expand Down
3 changes: 2 additions & 1 deletion xrdp/xrdp_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,8 @@ struct xrdp_mod
int (*server_egfx_cmd)(struct xrdp_mod *v,
char *cmd, int cmd_bytes,
char *data, int data_bytes);
tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server
int (*server_set_pointer_system)(struct xrdp_mod *v, int pointer_type);
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
functions above */
/* common */
tintptr handle; /* pointer to self as int */
Expand Down
7 changes: 7 additions & 0 deletions xrdp/xrdp_wm.c
Original file line number Diff line number Diff line change
Expand Up @@ -418,6 +418,13 @@ xrdp_wm_load_pointer(struct xrdp_wm *self, char *file_name, char *data,
return 0;
}

/*****************************************************************************/
int
xrdp_wm_send_pointer_system(struct xrdp_wm *self, int pointer_type)
{
return libxrdp_send_pointer_system(self->session, pointer_type);
}

/*****************************************************************************/
int
xrdp_wm_send_pointer(struct xrdp_wm *self, int cache_idx,
Expand Down
16 changes: 16 additions & 0 deletions xup/xup.c
Original file line number Diff line number Diff line change
Expand Up @@ -1553,6 +1553,19 @@ process_server_paint_rect_shmfd(struct mod *amod, struct stream *s)
return rv;
}

/******************************************************************************/
/* return error */
static int
process_server_set_pointer_system(struct mod *amod, struct stream *s)
{
int rv;
int pointer_type;

in_uint32_le(s, pointer_type);
rv = amod->server_set_pointer_system(amod, pointer_type);
return rv;
}

/******************************************************************************/
/* return error */
static int
Expand Down Expand Up @@ -1788,6 +1801,9 @@ lib_mod_process_orders(struct mod *mod, int type, struct stream *s)
case 64: /* server_paint_rect_shmfd */
rv = process_server_paint_rect_shmfd(mod, s);
break;
case 65: /* server_set_pointer_system */
rv = process_server_set_pointer_system(mod, s);
break;
default:
LOG_DEVEL(LOG_LEVEL_WARNING,
"lib_mod_process_orders: unknown order type %d", type);
Expand Down
3 changes: 2 additions & 1 deletion xup/xup.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,8 @@ struct mod
int (*server_egfx_cmd)(struct mod *v,
char *cmd, int cmd_bytes,
char *data, int data_bytes);
tintptr server_dumby[100 - 51]; /* align, 100 minus the number of server
int (*server_set_pointer_system)(struct mod *v, int pointer_type);
tintptr server_dumby[100 - 52]; /* align, 100 minus the number of server
functions above */
/* common */
tintptr handle; /* pointer to self as long */
Expand Down